home *** CD-ROM | disk | FTP | other *** search
- code Segment Para
- Assume cs:code, ds:code
- org 100h
- park proc far
- jmp init
- x1coff dw 0
- x1cseg dw 0
- x13off dw 0
- x13seg dw 0
- parked dw 0
- count dw 0
- value dw 0
- flag dw 0
- oldax dw 0
- oldip dw 0
- oldcs dw 0
- oldflgs dw 0
- even
- x1cint: push ax
- push bx
- push cx
- push dx
- push ds
- mov ax,cs
- mov ds,ax
- xor ax,ax
- cmp parked,ax
- jne x1cext
- dec word ptr count
- cmp count,ax
- jne x1cext
- cmp flag,1
- je x1cext
- cli
- mov ax,1
- mov parked,ax
- mov flag,ax
- mov ax,value
- mov count,ax
- pop ds
- pop dx
- pop cx
- pop bx
- pop ax
- mov cs:oldax,ax
- pop ax ;ip
- mov cs:oldip,ax
- pop ax ;cs
- mov cs:oldcs,ax
- pop ax ;flags
- mov cs:oldflgs,ax
- mov ax,offset parks
- ;Generate an interrupt return to the parker
- pushf
- push cs
- push ax
- mov ax,cs:oldax
- sti
- jmp dword ptr cs:[x1coff]
- x1cext: jmp x1cout
- parks: sti
- push ax
- push cx
- push dx
- push ds
- mov ax,cs
- mov ds,ax
- ;
- ;
- ; Do the BIOS's dirty work so this code will work!
- ;
- mov al,020h
- out 020h,al
- ;
- ;
- ;
- mov ah,08
- mov dx,80h
- int 13h
- mov dx,80h
- inc ch
- jnc p1
- add cl,40h
- p1: mov ax,0c01h
- int 13h
- ;
- mov ah,08
- mov dx,81h
- int 13h
- mov dx,81h
- inc ch
- jnc p2
- add cl,40h
- p2: mov ax,0c01h
- int 13h
- ;
- xor ax,ax
- mov flag,ax
- pop ds
- pop dx
- pop cx
- mov ax,cs:oldflgs
- push ax
- popf
- pop ax
- jmp dword ptr cs:[oldip]
- x1cout: pop ds
- pop dx
- pop cx
- pop bx
- pop ax
- x1cou1: jmp dword ptr cs:[x1coff]
- x13int: push ax
- push ds
- sti
- mov ax,cs
- mov ds,ax
- cmp flag,1
- je x13in1
- mov ax,value
- mov count,ax
- xor ax,ax
- mov parked,ax
- x13in1: pop ds
- pop ax
- jmp dword ptr cs:[x13off]
- dw 0
- table dw 0
- init: xor ax,ax
- mov parked,ax
- mov bx,80h
- mov al,[bx]
- cmp al,0
- jne init1
- int 21h
- init1: inc bx
- mov al,[bx]
- cmp al,32
- je init1
- cmp al,13
- jne init3
- init2: xor ax,ax
- int 21h
- init3: cmp al,49
- jb init2
- cmp al,57
- ja init2
- lea dx,mess
- mov cx,ax
- mov ah,09
- int 21h
- mov ax,cx
- xor ah,ah
- mov bx,0fh
- and ax,bx
- mov dx,1091
- mul dx
- mov value,ax
- mov count,ax
- cli
- push es
- xor ax,ax
- mov es,ax
- mov bx,76
- mov ax,es:[bx]
- mov x13off,ax
- mov ax,offset x13int
- mov es:[bx],ax
- inc bx
- inc bx
- mov ax,es:[bx]
- mov x13seg,ax
- mov ax,cs
- mov es:[bx],ax
- xor ax,ax
- mov flag,ax
- mov es,ax
- mov bx,112
- mov ax,es:[bx]
- mov x1coff,ax
- mov ax,offset x1cint
- mov es:[bx],ax
- inc bx
- inc bx
- mov ax,es:[bx]
- mov x1cseg,ax
- mov ax,cs
- mov es:[bx],ax
- pop es
- sti
- mov dx,offset table
- int 27h
- mess db 'Alpha Computer Service timed parker is activated'
- db 13,10,'for hard disks C and, if present, D'
- db 13,10,'$'
- park endp
- code ends
- end park